Multi-processor computing systems are capable of executing multiple threads concurrently in a process often called parallel processing. Each processor has one active worker at a time, where a worker is a processor in combination with the contextual data for the processor. Such contextual data may be, for example, the content of the processor registers. In dynamic systems that have multiple workloads and many processors, scheduling data parallel operations has some difficulties.
One difficulty is that in a dynamic system, the number of available processors for a given parallel application is not predetermined since it cannot be reliably predicted when and for how long any particular processors may be preempted for work in other parts of the system. Since the availability of resources comes and goes as other requests are serviced, it is costly to reserve resources for operations that will occur infrequently.
Secondly, many times, the level of effort an individual work unit or group of units will take is data-dependent and thus cannot be predicted in advance. If one were to try and predetermine the execution costs, then enough resources would be used to account for the worst case. When resources are reserved ahead of time based on a worst case analysis, the reserved resource will go wasted when the worst case is not encountered.